// package com.shuqi.model;
//
// import java.io.UnsupportedEncodingException;
// import java.util.ArrayList;
// import java.util.List;
// import java.util.Vector;
// import android.content.Context;
// import android.graphics.Bitmap;
// import android.graphics.Canvas;
// import android.graphics.Paint;
// import android.graphics.Typeface;
// import android.graphics.Paint.Align;
// import android.util.Log;
// import com.shuqi.bean.BookContentLineInfo;
// import com.shuqi.encoding.UTF8Encoding;
// import com.shuqi.log.Log4an;
//
// /**
// * 阅读页数据排版处理
// *
// * @author yhw
// */
// public class BookContentPageModel2 {
// private Context context;
// private Paint mPaint;
//
// // TODO
// float textwight = 26;
//
// private BookContentSettings settings;
//
// public BookContentPageModel2(Context context, BookContentSettings settings) {
// this.context = context;
// this.settings = settings;
// // 创建画笔
// mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
// // 设置布局方式
// mPaint.setTextAlign(Align.LEFT);
// // 获取并设置字体的大小
// mPaint.setTextSize(settings.getTextSize());
// for (int i = 0; i < 100; i++) {
// mLines.add("****测试数据test-->"+i);
// }
// }
//
//
// // 默认字体颜色
// private int mTextColor = 0xFF3F392E;
// // 背景颜色
// private int mBackColor = 0xFFD3C3A9;
// // 背景Bitmap
// private Bitmap mBgBitmap = null;
// private Vector<String> mLines = new Vector<String>();
//
// /**
// * 绘制
// *
// * @param canvas
// */
// public void draw(Canvas canvas) {
// mPaint.setColor(mTextColor); // 设置字体颜色
// Log4an.e(Log4an.TAG_YJD, "mBgBitmap-->" + ((mBgBitmap==null)?true:false));
// // 绘制默认背景
// if (mBgBitmap == null) {
// canvas.drawColor(mBackColor);
// } else {
// canvas.drawBitmap(mBgBitmap, 0, 0, null);
// }
//
// mPaint.setTextSize(settings.getTitleTextSize());// 设置章节名称文字大小
// mPaint.setTypeface(Typeface.DEFAULT_BOLD); // 设置章节名称为黑体
// drawTitle(canvas);// 绘制章节名称
//
// mPaint.setTextSize(settings.getTextSize());// 设置正文内容文字大小
// mPaint.setTypeface(Typeface.DEFAULT); // 将字体设置回默认字体
//
// int mH = settings.getMarginTop() + settings.getLineSpace();
//
// for (String line : mLines) {
// mH = mH + settings.getTextSize();
// canvas.drawText(line, settings.getMarginLeft(), settings.getTitleTextSize() + mH, mPaint);//
// 绘制正文内容
// // 绘制高度从绘制章节标题底部算起
// mH = mH + settings.getLineSpace();
// }
//
// mPaint.setTextSize(30); // 设置百分比和时间字体大小
// mPaint.setTextSize(settings.getTextSize());// 设置文字大小 把字体设置回去
// }
//
// /**
// * 绘制标题
// *
// * @param canvas
// */
// private void drawTitle(Canvas canvas) {
// String fileName = "text";
// canvas.drawText(fileName, settings.getMarginLeft(), settings.getMarginTop() +
// settings.getTextSize(), mPaint);
// }
//
// public void setBgBitmap(Bitmap mBgBitmap) {
// this.mBgBitmap = mBgBitmap;
// }
//
// /**
// * 从传递过来的字节流中的某一个字节进行前后分行
// *
// * @throws UnsupportedEncodingException
// * @param list
// * 如果该章已经处理了章节名，则传递包含章节名的list
// * @param data
// * 要排版的数组
// * @param isHeader
// * 是否为标题
// * @param startByte
// * 数组第一个字节的起始索引
// * @param divideByte
// * 数组中要拆分显示的字节索引
// * @param encoding
// * 字节内容的编码
// * @return
// * @throws UnsupportedEncodingException
// */
// public List<BookContentLineInfo> getLineinfosByIndex(List<BookContentLineInfo> list, byte[] data,
// boolean isHeader, int startByte, int divideByte, String encoding)
// throws UnsupportedEncodingException {
// if (list == null) {
// list = new ArrayList<BookContentLineInfo>();
// }
// Log.e("model",
// "list:"+(list==null?"null":list.size())+",data:"+data.length+",startByte:"+startByte+
// ",divideByte:"+divideByte+",encoding："+encoding);
// /** [0]需要显示索引之前的内容，[1]需要显示索引之后的内容 */
// String content[] = null;
// content = new String[2];
//
// // 防止越界
// if (divideByte < 0) {
// divideByte = 0;
// } else if (divideByte > data.length) {
// divideByte = data.length - 1;
// }
// // float[] widths = new float[content.length()];
// // paint.getTextWidths(content, widths);
//
// int readLenth1 = 0;// 前一段文字实际读取的长度
// int readLenth2 = 0;// 后一段文字实际读取的长度
// try {
// UTF8Encoding utf = new UTF8Encoding();
//
// if (divideByte > 0) {
// readLenth1 = utf.toChars(data, 0, divideByte - 1);
// content[0] = new String(utf.mValues);
// }
// if (divideByte < data.length) {
// readLenth2 = utf.toChars(data, readLenth1, data.length);
// content[1] = new String(utf.mValues);
// }
// if(content[0]==null){
// Log.e("modle", "content[0] : null");
// }else{
// Log.e("modle", "content[0] :"+content[0].length()+"_"+content[0]);
// }
// if(content[1]==null){
// Log.e("modle", "content[1] : null");
// }else{
// Log.e("modle", "content[1] :"+content[1].length()+"_"+content[1]);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// BookContentLineInfo line = null;
// // 换行：1：遇到\n 2,字数达到LineMaxNum:15字
// int lastLineEndCharIndex = 0; // 上一行最后一个字符的索引
// int lastLineEndByteIndex = startByte; // 上一行最后一个字节的索引
//
// int num = 0;
// for (int j = 0; j < content.length; j++) {
// lastLineEndCharIndex = 0;
// if (content[j] != null && !"".equals(content[j])) {
// float[] widths = new float[content[j].length()];
// for (int i = 0; i < widths.length; i++) {
// widths[i] = textwight;
// }
// System.out.println(content[j].length() + ", widths.length:" + widths.length);
// for (int i = 0; i < content[j].length(); i++) {
// if (content[j].charAt(i) == '\n') {
// line = new BookContentLineInfo();
// list.add(line);
// line.setContent(content[j].substring(lastLineEndCharIndex, i + 1));
// line.setFirstIndex(lastLineEndByteIndex + 1);
// line.setEndIndex(lastLineEndByteIndex + line.getContent().getBytes(encoding).length);
// setXYS(line, widths, lastLineEndCharIndex, false);
// lastLineEndCharIndex += line.getContent().length();
// lastLineEndByteIndex = line.getEndIndex();
// System.out.println(line.getFirstIndex() + "." + line.getEndIndex() + ":" + line.getContent());
// num++;
// System.out.println("----------------------" + list.size() + "----" + num);
// continue;
// }
// // 宽度大于view宽度时，开始分行
// float f = 0;
// for (int a = lastLineEndCharIndex; a <= i; a++) {
// f += widths[a];
// }
// if (f > settings.getScreenWidth() - settings.getMarginLeft() - settings.getMarginRight()) {
// // @yanghuawei 判断首行是否为特殊标点，如果是把上一行文字拿下来
// line = new BookContentLineInfo();
// list.add(line);
// line.setContent(content[j].substring(lastLineEndCharIndex, i + 1));
// line.setFirstIndex(lastLineEndByteIndex + 1);
// line.setEndIndex(lastLineEndByteIndex + line.getContent().getBytes(encoding).length);
// setXYS(line, widths, lastLineEndCharIndex, false);
// lastLineEndCharIndex += line.getContent().length();
// lastLineEndByteIndex = line.getEndIndex();
// System.out.println(line.getFirstIndex() + "." + line.getEndIndex() + ":" + line.getContent());
//
// // 当剩余字数不足一行时
// if ((i + 1) == content[j].length()) {
// line = new BookContentLineInfo();
// list.add(line);
// line.setContent(content[j].substring(lastLineEndCharIndex, i + 1));
// line.setFirstIndex(lastLineEndByteIndex + 1);
// line.setEndIndex(lastLineEndByteIndex + line.getContent().getBytes(encoding).length);
// setXYS(line, widths, lastLineEndCharIndex, false);
// lastLineEndByteIndex = line.getEndIndex();
// lastLineEndCharIndex += line.getContent().length();
// System.out.println(line.getFirstIndex() + "." + line.getEndIndex() + ":" + line.getContent());
// }
// continue;
// }
//
// if ((i + 1) == content[j].length()) {
// line = new BookContentLineInfo();
// list.add(line);
// line.setContent(content[j].substring(lastLineEndCharIndex, i + 1));
// line.setFirstIndex(lastLineEndByteIndex + 1);
// line.setEndIndex(lastLineEndByteIndex + line.getContent().getBytes(encoding).length);
// setXYS(line, widths, lastLineEndCharIndex, false);
// lastLineEndByteIndex = line.getEndIndex();
// lastLineEndCharIndex += line.getContent().length();
// System.out.println(line.getFirstIndex() + "." + line.getEndIndex() + ":" + line.getContent());
// continue;
// }
// }
// }
//
// }
// System.out.println("------" + list.size() + "----" + num);
// System.out.println("------start:" + divideByte + ",len:" + data.length + ",list.first:" +
// list.get(0).getFirstIndex() + ",list.end:" + list.get(list.size() - 1).getEndIndex());
//
// return list;
// }
//
// int totlelen = 0;
// /** 设置每行字的x坐标 */
// public void setXYS(BookContentLineInfo info, float[] widths, int start, boolean isFillWidth) {
// totlelen+=info.getContent().length();
// System.out.println(".....setxys widths:"+widths.length+ ", totlelen:"+totlelen+
// ",line length"+info.getContent().length()+",start:"+start+"---"+info.getContent());
// if (info.getContent() != null) {
// float[] xys = new float[info.getContent().length() * 2];
// info.setXys(xys);
// } else {
// info.setXys(new float[0]);
// return;
// }
// float space = 0;
// if (isFillWidth && info.getContent().length() > 0) {
// float stringWidth = 0;
// for (int j = 0; j < info.getContent().length(); j++) {
// stringWidth += widths[j + start];
// }
// space = (settings.getScreenWidth() - stringWidth - settings.getMarginLeft() -
// settings.getMarginRight()) / (info.getContent().length() - 1);
// }
// for (int j = 0; j < info.getContent().length(); j++) {
// if (j == 0) {
// info.getXys()[0] = settings.getMarginLeft();
// } else {
// info.getXys()[j * 2] = info.getXys()[j * 2 - 2] + widths[j - 1 + start] + space;
// }
// }
// for (int i = 0; i < info.getXys().length; i++) {
// System.out.print("i:" + info.getXys()[i] + ";  ");
// }
// }
//
// // if((i-lastLineEndCharIndex) >= LineMaxNum){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content[j].substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // setXYS(line, widths, lastLineEndCharIndex, false);
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
//
// // /**从传递过来的字节流中的起始位置分行
// // * @throws UnsupportedEncodingException */
// // public List<BookContentLineInfo>
// // getLineinfosByteStart(List<BookContentLineInfo> list, byte[] data,int
// // startIndex,String encoding) throws UnsupportedEncodingException{
// // if(data == null || data.length == 0){
// // return null;
// // }
// // if(startIndex < 0){
// // startIndex = 0;
// // }
// // String content = null;
// // UTF8Encoding utf = new UTF8Encoding();
// // utf.toChars(data, 0, data.length-1);
// // content = new String(utf.mValues);
// // BookContentLineInfo line = null;
// // //换行：1：遇到\n 2,字数达到LineMaxNum:15字
// // int lastLineEndCharIndex = 0; //上一行最后一个字符的索引
// // long lastLineEndByteIndex = startIndex; //上一行最后一个字节的索引
// // if(content!=null && !"".equals(content)){
// // for (int i = 0; i < content.length(); i++) {
// // if(content.charAt(i)=='\n'){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }else if((i-lastLineEndCharIndex) >= LineMaxNum){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
// // if((i+1)==content.length()){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndByteIndex = line.getEndIndex();
// // lastLineEndCharIndex += line.getContent().length();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
// // }
// // }
// //
// //
// // return null;
// // }
// //
// // public List<BookContentLineInfo>
// // getLineinfosByChapter(List<BookContentLineInfo> list, byte[] data,
// // int startIndex,boolean isFirstIndex,String encoding) throws
// // UnsupportedEncodingException{
// //
// // return null;
// // }
// // public List<BookContentLineInfo>
// // getLineinfosByIndexs(List<BookContentLineInfo> list, byte[] data,
// // int startIndex,boolean isFirstIndex,String encoding) throws
// // UnsupportedEncodingException{
// //
// // return null;
// // }
// // /**
// // * 从传递过来的字节流中的某一个字节进行前后分行
// // * @throws UnsupportedEncodingException
// // * @param list 如果该章已经处理了章节名，则传递包含章节名的list
// // * @param data 要排版的数组
// // * @param isHeader 是否为标题
// // * @param startByte 数组第一个字节的起始索引
// // * @param divideByte 数组中要拆分显示的字节索引
// // * @param encoding 字节内容的编码
// // * @return
// // * @throws UnsupportedEncodingException
// // */
// // public List<BookContentLineInfo>
// // getLineinfosByIndex(List<BookContentLineInfo> list, byte[] data,
// // boolean isHeader, int startByte, int divideByte, String encoding) throws
// // UnsupportedEncodingException{
// // /** [0]需要显示索引之前的内容，[1]需要显示索引之后的内容 */
// // String content[] = null;
// // if(divideByte != 0){
// // content = new String[2];
// // }else{
// // content = new String[1];
// // }
// // // String content1 = null; //本章节书签之前的内容
// // // String content2 = null; //本章节书签之后的内容
// //
// // if(divideByte<0){
// // divideByte = 0;
// // }else if(divideByte > data.length){
// // divideByte = data.length-1;
// // }
// // // if (content == null) {
// // // content = "";
// // // }
// // // float[] widths = new float[content.length()];
// // // paint.getTextWidths(content, widths);
// //
// // int readLenth1 = 0;
// // int readLenth2 = 0;
// // try {
// // UTF8Encoding utf = new UTF8Encoding();
// //
// // if(divideByte > 0){
// // readLenth1 = utf.toChars(data, 0, divideByte-1);
// // content[0] = new String(utf.mValues);
// // }
// // if(divideByte < data.length){
// // readLenth2 = utf.toChars(data, readLenth1, data.length);
// // content[1] = new String(utf.mValues);
// // }
// // System.out.println("1:------"+content[0]);
// // System.out.println("2:------"+content[1]);
// // } catch (Exception e) {
// // e.printStackTrace();
// // }
// // BookContentLineInfo line = null;
// // //换行：1：遇到\n 2,字数达到LineMaxNum:15字
// // int lastLineEndCharIndex = 0; //上一行最后一个字符的索引
// // long lastLineEndByteIndex = 0; //上一行最后一个字节的索引
// //
// // for (int j = 0; j < content.length; j++) {
// // lastLineEndCharIndex=0;
// // if(content[j]!=null && !"".equals(content[j])){
// // for (int i = 0; i < content[j].length(); i++) {
// // if(content[j].charAt(i)=='\n'){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content[j].substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }else if((i-lastLineEndCharIndex) >= LineMaxNum){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content[j].substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
// // if((i+1)==content[j].length()){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content[j].substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndByteIndex = line.getEndIndex();
// // lastLineEndCharIndex += line.getContent().length();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
// // }
// // }
// //
// // }
// // System.out.println("----------------------"+list.size());
// //
// System.out.println("start:"+divideByte+",len:"+data.length+",list.first:"+list.get(0).getFirstIndex()+",list.end:"+list.get(list.size()-1).getEndIndex());
// //
// // return list;
// // }
//
// // if(content2!=null && !"".equals(content2)){
// // for (int i = 0; i < content2.length(); i++) {
// // if(content2.charAt(i)=='\n' || ((i-lastLineEndCharIndex) >= LineMaxNum)){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content2.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndByteIndex = line.getEndIndex();
// // lastLineEndCharIndex += line.getContent().length();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }else if((i-lastLineEndCharIndex) >= LineMaxNum){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content2.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndCharIndex += line.getContent().length();
// // lastLineEndByteIndex = line.getEndIndex();
// // System.out.println(line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // continue;
// // }
// // if((i+1)==content2.length()){
// // line = new BookContentLineInfo();
// // list.add(line);
// // line.setContent(content2.substring(lastLineEndCharIndex, i+1));
// // line.setFirstIndex(lastLineEndByteIndex+1);
// // line.setEndIndex(lastLineEndByteIndex +
// // line.getContent().getBytes(encoding).length);
// // lastLineEndByteIndex = line.getEndIndex();
// // lastLineEndCharIndex += line.getContent().length();
// // System.out.println(i+"/"+line.getFirstIndex()+"."+line.getEndIndex()+":"+line.getContent());
// // }
// // }
// // }
// }
